esbuild deno loaderをweb browserで動かす
作業ログ
依存コードにDenoを使うコードが含まれてしまっているっぽい
Deno.*をmockで提供すれば動かせないか?
Deno.build.osにアクセスされている
Deno.errors.AlreadyExists
はーん。副作用が混じってしまっているのか
13:50:24 うごいた
code:deno-mock.js
globalThis.Deno = {
build: { os: "linux" },
errors: { AlreadyExists: Error },
env: { get: () => undefined },
permissions: { query: () => Promise.resolve("denied") },
cwd: () => location.href,
};
code:mock入れて動くようになった.ts
import "./deno-mock.js"; // esbuild_deno_loaderより先に読み込む
目的のimportより前に読み込みたい副作用は、importを使う
code:mock入れて動くようになった.ts
import { initialize, build } from "../esbuild-wasm-no-blob/mod.ts";
try {
await initialize({
// 0.23.0
wasmModule: await WebAssembly.compileStreaming(
),
workerURL: "/api/code/takker-dist/esbuild-wasm-no-blob/worker.js",
});
} catch(_) {
// 重複初期化エラーは無視
}
const result = await build({
entryPoints: [
// css is not supported
],
format: "esm",
minify: true,
bundle: true,
charset: "utf8",
plugins: [
denoResolverPlugin(),
import graphを取得したかったが、resolved URLしかargから取得できなかった
importerが消えている
code:mock入れて動くようになった.ts
{
name: "inspector",
setup(build) {
const onResolve = (args) => {
console.debug(args);
return undefined;
};
build.onResolve({ filter: /.*/, namespace: "file" }, onResolve);
build.onResolve({ filter: /.*/, namespace: "http" }, onResolve);
build.onResolve({ filter: /.*/, namespace: "https" }, onResolve);
build.onResolve({ filter: /.*/, namespace: "data" }, onResolve);
build.onResolve({ filter: /.*/, namespace: "npm" }, onResolve);
build.onResolve({ filter: /.*/, namespace: "jsr" }, onResolve);
build.onResolve({ filter: /.*/, namespace: "node" }, onResolve);
},
},
denoLoaderPlugin({ loader: "portable" }),
],
write: false,
});
// 2つのファイルが配列される
console.debug(result.outputFiles);